home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Czech Logic, Card & Gambling Games
/
Logické hry.iso
/
hry
/
Fish Fillets
/
script
/
party1
/
code.lua
next >
Wrap
Text File
|
2005-07-16
|
22KB
|
580 lines
--NOTE: glasses must be together in models.lua
--NOTE: last glass is the plate
local glasses = {}
for i = 0, 8 do
glasses[i] = getModelsTable()[sklenka.index + i]
end
local function setViewShiftX(model, reference, shift_x)
model_setViewShift(model.index,
reference.X + shift_x - model.X, 0)
end
-- -----------------------------------------------------------------
-- Init
-- -----------------------------------------------------------------
local function prog_init()
initModels()
sound_playMusic("music/rybky15.ogg")
local pokus = getRestartCount()
room.globpole = createArray(1024)
-- -------------------------------------------------------------
local function prog_init_room()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
room.uvod1 = 0
room.uvod2 = 0
room.nevylit = 0
room.ovalci = 0
if random(100) >= 130 - pokus * 30 then
room.uvod1 = 2
end
if random(100) >= 130 - pokus * 30 then
room.uvod2 = 2
end
if random(100) >= 120 - pokus * 20 then
room.nevylit = 2
end
if random(100) >= 120 - pokus * 20 then
room.ovalci = 2
end
if room.uvod2 == 0 then
room.globpole[1] = 1
room.globpole[2] = 1
else
room.globpole[1] = 0
room.globpole[2] = 0
end
room.bojise = 0
return function()
if no_dialog() and isReady(small) and isReady(big) then
pomb1 = false
for pom1, glass in pairs(glasses) do
if glass.dir == dir_left or glass.dir == dir_right then
pomb1 = true
end
end
pomb2 = false
--NOTE: glass num.8(=plate) is not used here
for pom1 = 0, 7 do
local glass = glasses[pom1]
if glass.Y == 27 and glass.X == 36 and ocel.X == 37 then
pomb2 = true
end
end
if room.uvod1 == 0 then
addm(random(20) + 20, "pt1-m-parnicek")
room.uvod1 = 1
elseif room.uvod2 == 0 then
addv(random(20) + 20, "pt1-v-predtucha")
addm(0, "pt1-m-predtucha")
planTimeAction(0, function() room.globpole[1] = 0 end)
planTimeAction(0, function() room.globpole[2] = 0 end)
room.uvod2 = 1
elseif room.uvod2 == 1 and (room.globpole[1] ~= 0 or room.globpole[2] ~= 0) then
room.uvod2 = 2
addm(10 + random(10), "pt1-m-kostlivec")
elseif room.bojise == 0 and room.uvod2 == 2 and (room.globpole[1] ~= 0 or room.globpole[2] ~= 0) and random(1000) < 3 then
room.bojise = 1
addm(20, "pt1-m-vylezt"..random(3))
addv(random(10) + 5, "pt1-v-pryc"..random(2))
elseif room.ovalci == 0 and pomb2 then
room.ovalci = 1
addv(3, "pt1-v-valec")
addm(random(5), "pt1-m-nemuzu")
elseif room.nevylit == 0 and pomb1 and random(100) < 1 then
room.nevylit = 1
addv(0, "pt1-v-pozor")
end
end
end
end
-- -------------------------------------------------------------
local function prog_init_frkavec()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
frkavec.cinnost = 0
frkavec:setEffect("invisible")
return function()
switch(frkavec.okno){
[1] = function()
setViewShiftX(frkavec, kabina, 2)
end,
[2] = function()
setViewShiftX(frkavec, kabina, 8)
end,
}
if frkavec.cinnost > 0 then
if frkavec.strana == 1 then
frkavec:setEffect("reverse")
else
frkavec:setEffect("none")
end
else
frkavec:setEffect("invisible")
end
switch(frkavec.cinnost){
[0] = function()
if random(1000) < 8 then
frkavec.okno = random(2) + 1
if room.globpole[frkavec.okno] == 0 then
frkavec.cinnost = 1
frkavec.faze = 0
frkavec.strana = random(2)
room.globpole[frkavec.okno] = 1
end
end
end,
[1] = function()
local anim_table = {
[0] = function()
frkavec.afaze = frkavec.faze
frkavec.faze = frkavec.faze + 1
end,
[5] = function()
frkavec.afaze = 5
frkavec.delay = random(10) + 5
frkavec.faze = frkavec.faze + 1
end,
[6] = function()
if frkavec.delay > 0 then
frkavec.delay = frkavec.delay - 1
else
frkavec.afaze = 6
frkavec.delay = 10
frkavec.faze = frkavec.faze + 1
end
end,
[7] = function()
if frkavec.delay > 0 then
frkavec.delay = frkavec.delay - 1
else
frkavec.afaze = 5
if random(100) < 75 then
frkavec.delay = 2 + random(10)
frkavec.faze = 6
else
frkavec.faze = frkavec.faze + 1
end
end
end,
[8] = function()
frkavec.faze = frkavec.faze + 1
end,
[9] = function()
room.globpole[frkavec.okno] = 0
frkavec.faze = frkavec.faze + 1
end,
[10] = function()
frkavec.afaze = 14 - frkavec.faze
frkavec.faze = frkavec.faze + 1
if frkavec.faze == 15 then
frkavec.cinnost = 0
end
end,
}
anim_table[1] = anim_table[0]
anim_table[2] = anim_table[0]
anim_table[3] = anim_table[0]
anim_table[4] = anim_table[0]
anim_table[11] = anim_table[10]
anim_table[12] = anim_table[10]
anim_table[13] = anim_table[10]
anim_table[14] = anim_table[10]
switch(frkavec.faze)(anim_table)
end,
}
frkavec:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_dama()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
dama:setEffect("invisible")
dama.kdeje = random(3)
dama.cinnost = 0
return function()
switch(dama.okno){
[1] = function()
setViewShiftX(dama, kabina, 2)
end,
[2] = function()
setViewShiftX(dama, kabina, 8)
end,
}
if dama.cinnost > 0 then
if dama.strana == 1 then
dama:setEffect("reverse")
else
dama:setEffect("none")
end
else
dama:setEffect("invisible")
end
local cinnost_table = {
[0] = function()
if random(1000) < 8 then
switch(dama.kdeje){
[0] = function()
dama.okno = 1
dama.strana = 1
dama.kdebude = 1
end,
[1] = function()
dama.strana = random(2)
dama.okno = dama.strana + 1
dama.kdebude = dama.strana * 2
end,
[2] = function()
dama.okno = 2
dama.strana = 0
dama.kdebude = 1
end,
}
if room.globpole[dama.okno] == 0 then
room.globpole[dama.okno] = 1
dama.cinnost = random(2) + 1
dama.faze = 0
dama.delay = 3
end
end
end,
[1] = function()
local anim_table = {
[20] = function()
dama.faze = dama.faze + 1
end,
[24] = function()
dama.afaze = 15
dama.faze = dama.faze + 1
end,
[28] = function()
dama.afaze = 6
dama.faze = dama.faze + 1
end,
[30] = function()
dama.faze = 7
end,
default = function()
if dama.faze >= 0 and dama.faze <= 14 then
dama.afaze = dama.faze
if dama.delay > 0 then
dama.delay = dama.delay - 1
else
dama.delay = 3
dama.faze = dama.faze + 1
if dama.faze == 7 and dama.cinnost == 2 then
dama.faze = 20
end
end
if dama.faze == 15 then
dama.cinnost = 0
room.globpole[dama.okno] = 0
dama.kdeje = dama.kdebude
end
end
end,
}
anim_table[21] = anim_table[20]
anim_table[22] = anim_table[20]
anim_table[23] = anim_table[20]
anim_table[25] = anim_table[24]
anim_table[26] = anim_table[24]
anim_table[27] = anim_table[24]
anim_table[29] = anim_table[28]
switch(dama.faze)(anim_table)
end,
}
cinnost_table[2] = cinnost_table[1]
switch(dama.cinnost)(cinnost_table)
dama:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_kapitan()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
kapitan:setEffect("invisible")
kapitan.kdeje = random(3)
kapitan.cinnost = 0
return function()
switch(kapitan.okno){
[1] = function()
setViewShiftX(kapitan, kabina, 2)
end,
[2] = function()
setViewShiftX(kapitan, kabina, 8)
end,
}
if kapitan.cinnost > 0 then
if kapitan.strana == 0 then
kapitan:setEffect("reverse")
else
kapitan:setEffect("none")
end
else
kapitan:setEffect("invisible")
end
local cinnost_table = {
[0] = function()
if random(1000) < 8 then
switch(kapitan.kdeje){
[0] = function()
kapitan.okno = 1
kapitan.strana = 1
kapitan.kdebude = 1
end,
[1] = function()
kapitan.strana = random(2)
kapitan.okno = kapitan.strana + 1
kapitan.kdebude = kapitan.strana * 2
end,
[2] = function()
kapitan.okno = 2
kapitan.strana = 0
kapitan.kdebude = 1
end,
}
if room.globpole[kapitan.okno] == 0 then
room.globpole[kapitan.okno] = 1
kapitan.cinnost = random(2) + 1
kapitan.faze = 0
kapitan.delay = 2
end
end
end,
[1] = function()
local anim_table = {
[20] = function()
kapitan.afaze = kapitan.faze - 20 + 15
kapitan.faze = kapitan.faze + 1
end,
[24] = function()
kapitan.afaze = 27 - kapitan.faze + 15
kapitan.faze = kapitan.faze + 1
end,
[28] = function()
kapitan.faze = 8
end,
default = function()
if kapitan.faze >= 0 and kapitan.faze <= 14 then
kapitan.afaze = kapitan.faze
if kapitan.delay > 0 then
kapitan.delay = kapitan.delay - 1
else
kapitan.delay = 2
kapitan.faze = kapitan.faze + 1
if kapitan.faze == 8 and kapitan.cinnost == 2 then
kapitan.faze = 20
end
end
if kapitan.faze == 15 then
kapitan.cinnost = 0
room.globpole[kapitan.okno] = 0
kapitan.kdeje = kapitan.kdebude
end
end
end,
}
anim_table[21] = anim_table[20]
anim_table[22] = anim_table[20]
anim_table[23] = anim_table[20]
anim_table[25] = anim_table[24]
anim_table[26] = anim_table[24]
anim_table[27] = anim_table[24]
switch(kapitan.faze)(anim_table)
end,
}
cinnost_table[2] = cinnost_table[1]
switch(kapitan.cinnost)(cinnost_table)
kapitan:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_lodnik()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
lodnik:setEffect("invisible")
lodnik.kdeje = random(3)
lodnik.cinnost = 0
return function()
switch(lodnik.okno){
[1] = function()
setViewShiftX(lodnik, kabina, 2)
end,
[2] = function()
setViewShiftX(lodnik, kabina, 8)
end,
}
if lodnik.cinnost > 0 then
if lodnik.strana == 1 then
lodnik:setEffect("reverse")
else
lodnik:setEffect("none")
end
else
lodnik:setEffect("invisible")
end
switch(lodnik.cinnost){
[0] = function()
if random(1000) < 8 then
switch(lodnik.kdeje){
[0] = function()
lodnik.okno = 1
lodnik.strana = 1
lodnik.kdebude = 1
end,
[1] = function()
lodnik.strana = random(2)
lodnik.okno = lodnik.strana + 1
lodnik.kdebude = lodnik.strana * 2
end,
[2] = function()
lodnik.okno = 2
lodnik.strana = 0
lodnik.kdebude = 1
end,
}
if room.globpole[lodnik.okno] == 0 then
room.globpole[lodnik.okno] = 1
lodnik.cinnost = random(2) + 1
lodnik.faze = 0
lodnik.delay = (lodnik.cinnost - 1) * 2
end
end
end,
[1] = function()
if lodnik.faze >= 0 and lodnik.faze <= 9 then
lodnik.afaze = lodnik.faze
if lodnik.delay > 0 then
lodnik.delay = lodnik.delay - 1
else
lodnik.delay = 1 + (lodnik.cinnost - 1) * 2
lodnik.faze = lodnik.faze + 1
end
if lodnik.faze == 10 then
lodnik.cinnost = 0
room.globpole[lodnik.okno] = 0
lodnik.kdeje = lodnik.kdebude
end
end
end,
[2] = function()
if lodnik.faze >= 0 and lodnik.faze <= 12 then
lodnik.afaze = lodnik.faze + 10
if lodnik.delay > 0 then
lodnik.delay = lodnik.delay - 1
else
lodnik.delay = 1 + (lodnik.cinnost - 1) * 2
lodnik.faze = lodnik.faze + 1
end
if lodnik.faze == 13 then
lodnik.cinnost = 0
room.globpole[lodnik.okno] = 0
lodnik.kdeje = lodnik.kdebude
end
end
end,
}
lodnik:updateAnim()
end
end
-- -------------------------------------------------------------
local function prog_init_sklenka()
local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
for pom1 = 0, 8 do
room.globpole[1000 + pom1] = 0
end
return function()
for pom1, glass in pairs(glasses) do
pom2 = room.globpole[1000 + pom1]
if glass.dir ~= dir_no then
if pom2 == 0 then
pom2 = 9
elseif pom2 <= 6 then
pom2 = pom2 + 6
end
end
if pom2 == 0 then
glass.afaze = 0
else
pom2 = pom2 - 1
glass.afaze = 2 - math.mod(math.floor(pom2 / 3), 2)
end
room.globpole[1000 + pom1] = pom2
glass:updateAnim()
end
end
end
-- --------------------
local update_table = {}
local subinit
subinit = prog_init_room()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_frkavec()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_dama()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_kapitan()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_lodnik()
if subinit then
table.insert(update_table, subinit)
end
subinit = prog_init_sklenka()
if subinit then
table.insert(update_table, subinit)
end
return update_table
end
local update_table = prog_init()
-- -----------------------------------------------------------------
-- Update
-- -----------------------------------------------------------------
function prog_update()
for key, subupdate in pairs(update_table) do
subupdate()
end
end